package com.xadrez.modelo;

import com.xadrez.Principal;
import java.util.ArrayList;
import java.util.List;

public class Cavalo extends Peca {

    public Cavalo() {
    }

    public Cavalo(Jogador jogador) {
        super(jogador);
    }

    @Override
    public List<Posicao> recuperaMovimentosPossiveis(){
        //Primeiro recuperamos a posição da casa onde se encontra a peca.
        int posicaoX = this.getPosicaoNoTabuleiro().getX();
        int posicaoY = this.getPosicaoNoTabuleiro().getY();

        Tabuleiro tabuleiro = Principal.getTabuleiro();
        List<Posicao> lista = new ArrayList<Posicao>();

        if (!tabuleiro.temPecaDoJogadorNaPosicao(posicaoX - 1, posicaoY + 2) && isPosicaoDentroDosLimites(new Posicao(posicaoX - 1, posicaoY + 2))) {
            lista.add(new Posicao(posicaoX - 1, posicaoY + 2));
        }

        if (!tabuleiro.temPecaDoJogadorNaPosicao(posicaoX + 1, posicaoY + 2) && isPosicaoDentroDosLimites(new Posicao(posicaoX + 1, posicaoY + 2))) {
            lista.add(new Posicao(posicaoX + 1, posicaoY + 2));
        }

        if (!tabuleiro.temPecaDoJogadorNaPosicao(posicaoX - 1, posicaoY - 2) && isPosicaoDentroDosLimites(new Posicao(posicaoX - 1, posicaoY - 2))) {
            lista.add(new Posicao(posicaoX - 1, posicaoY - 2));
        }

        if (!tabuleiro.temPecaDoJogadorNaPosicao(posicaoX + 1, posicaoY - 2) && isPosicaoDentroDosLimites(new Posicao(posicaoX + 1, posicaoY - 2))) {
            lista.add(new Posicao(posicaoX + 1, posicaoY - 2));
        }

        if (!tabuleiro.temPecaDoJogadorNaPosicao(posicaoX + 2, posicaoY + 1) && isPosicaoDentroDosLimites(new Posicao(posicaoX + 2, posicaoY + 1))) {
            lista.add(new Posicao(posicaoX + 2, posicaoY + 1));
        }

        if (!tabuleiro.temPecaDoJogadorNaPosicao(posicaoX + 2, posicaoY - 1) && isPosicaoDentroDosLimites(new Posicao(posicaoX + 2, posicaoY - 1))) {
            lista.add(new Posicao(posicaoX + 2, posicaoY - 1));
        }

        if (!tabuleiro.temPecaDoJogadorNaPosicao(posicaoX - 2, posicaoY + 1) && isPosicaoDentroDosLimites(new Posicao(posicaoX - 2, posicaoY + 1))) {
            lista.add(new Posicao(posicaoX - 2, posicaoY + 1));
        }

        if (!tabuleiro.temPecaDoJogadorNaPosicao(posicaoX - 2, posicaoY - 1) && isPosicaoDentroDosLimites(new Posicao(posicaoX - 2, posicaoY - 1))) {
            lista.add(new Posicao(posicaoX - 2, posicaoY - 1));
        }


        if (lista.isEmpty()) {
            lista = null;
        }

        return lista;
    }

    @Override
    public String toString() {
        return "cavalo";
    }
}
